package concurrencia;

public class Semaforo {
    protected SemaforoBinario lock;
    protected SemaforoBinario condicion;
    protected int bloqueados;
	
    /*Constructor*/
    public Semaforo(SemaforoBinario _lock)
    {
        lock = _lock;
        condicion = new SemaforoBinario(0);
        bloqueados = 0;
    }
    
    /*Metodo para dormir hilos*/
    public void DELAY()
    {
        bloqueados++;
        lock.abrir();
        condicion.cerrar();
        lock.cerrar();
    }
    
    /*Metodo para despertar hilos*/
    public void RESUME()
    {
        if(!EMPTY()){
            bloqueados--;
        }
        condicion.abrir();
    }
    
    
    
    /*Metodo para saber si hay bloqueados*/
    public boolean EMPTY()
    {
        if(bloqueados>0){
            return false;
        } else return true;
    }

}
